#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include "hisi_l0_mem_pool.h"

static struct tasklet_struct test_tasklet;

static void test_tasklet_fn2(unsigned long data)
{
    void *mem = l0_kmalloc(512, 0);
    if (mem)
    {
        memset(mem, 0xAA, 1024);
        l0_kfree(mem);
        printk(KERN_INFO "Memory pool test passed in tasklet context\n");
    }
}

static void test_tasklet_fn1(unsigned long data)
{
    void *mem = l0_kmalloc(8192, 0);
    if (mem)
    {
        memset(mem, 0xAA, 1024);
        l0_kfree(mem);
        printk(KERN_INFO "Memory pool test passed in tasklet context\n");
    }
}

static int __init test_tasklet_init(void)
{
    tasklet_init(&test_tasklet, test_tasklet_fn1, 0);
    tasklet_init(&test_tasklet, test_tasklet_fn2, 0);
    tasklet_schedule(&test_tasklet);
    return 0;
}

static void __exit test_tasklet_exit(void)
{
    pr_info("test_tasklet_exit\n");
}

module_init(test_tasklet_init);
module_exit(test_tasklet_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("Kernel memory R/W demo");
